package a

import (
	"log/slog"
	"syscall"
	"unsafe"
)

// 将指针转换为 bool。
func ToBool(p uintptr) bool {
	return p != 0
}

// 将字符串转换为 UTF16 字节串指针，字节串以 '\0' 字节结束，空字符串为 "\0"。
func OfStr(s string) uintptr {
	r, e := syscall.UTF16PtrFromString(s)
	if e != nil {
		slog.Debug("a.Str", "error", e)
		return 0
	}
	return uintptr(unsafe.Pointer(r))
}

// 将字符串转换为 UTF16 字节串指针，字节串以 '\0' 字节结束，空字符串返回 0 （相当于 NULL）
func OfStr0(s string) uintptr {
	if s == "" {
		return 0
	}
	return OfStr(s)
}

// 将数组转换为指针，如果数组为空，返回 0
func OfSlice[S ~[]E, E any](s S) uintptr {
	if len(s) == 0 {
		return 0
	}
	return uintptr(unsafe.Pointer(&s[0]))
}
